/**
 * Copyright (c) 2011 James Wendel
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package nlworks.wowapi.params;

import java.util.HashSet;

import com.google.common.base.Joiner;

public class GuildParams {

	private String realmName;
	private String guildName;
	private HashSet<String> fields;

	public GuildParams(String realmName, String guildName) {
		this.realmName = realmName;
		this.guildName = guildName;
	}

	public GuildParams setMembers() {
		addField("members");
		return this;
	}

	public GuildParams setAchievementsCompleted() {
		addField("achievements");
		addField("achievementsCompleted");
		return this;
	}

	public GuildParams setAchievementsCompletedTimestamp() {
		addField("achievements");
		addField("achievementsCompletedTimestamp");
		return this;
	}

	public GuildParams setCriteria() {
		addField("achievements");
		addField("criteria");
		return this;
	}

	public GuildParams setCriteriaQuantity() {
		addField("achievements");
		addField("criteriaQuantity");
		return this;
	}

	public GuildParams setCriteriaTimestamp() {
		addField("achievements");
		addField("criteriaTimestamp");
		return this;
	}

	public GuildParams setCriteriaCreated() {
		addField("achievements");
		addField("criteriaCreated");
		return this;
	}

	private void addField(String key) {
		if (fields == null)
			fields = new HashSet<String>();
		fields.add(key);
	}
	
	public StringBuilder toString(StringBuilder sb, String baseQuery) {
		sb.append("/api/wow/guild/").append(realmName).append("/").append(guildName).append(baseQuery);
		if (fields != null && fields.size() > 0) {
			sb.append("&fields=");
			Joiner.on(',').skipNulls().appendTo(sb, fields);
		}
		
		return sb;
	}
}
